/**
 * 
 * Javascript de categorías eventos
 * DOM Ready
 * @author Joan Muñoz
 * 
 */
jQuery(function(){
    Categorias.init(); 
});


/**
 * 
 * Clase
 * @author Joan Muñoz
 * 
 */
var Categorias = new (function(){
    
  /**
   * 
   * Iniciliza el módulo
   * @author Joan Muñoz
   * 
   */
  this.init = function() {
	// Forms
    $('#frm_insert, #category_box').css({
      position : 'static',
      visibility : 'visible',
      display : 'none'
    });
  
    // Acciones de los botones
    $('#open_category').on('click', function(e) {
      $('#edit_category_id').val(); // Vacia el input hidden
      Categorias.showCategoryForm();
    });
    $('#cancel_category').on('click', this.hideCategoryForm);
    $('#add_category').on('click', this.addCategory);
    
    // Inicializa las accciones de los botones de categoría
    this.initCategoryActions();
  }; // end of init()
  
  /**
   * 
   * Mostrar el formulario de categorias
   * @author Joan Muñoz
   * 
   */
  this.showCategoryForm = function() {
    $('#open_category').hide();
    $('#category_box').slideDown(); 
  };
  
  /**
   * 
   * Oculta el formulario de categorias
   * @author Joan Muñoz
   * 
   */
  this.hideCategoryForm = function(e) {
    
    // Oculta las errores
    $('#category_name').val('');
    var parent = $('#category_name').parent();
    parent.removeClass('error');
    parent.find('.help-inline').hide();
    
    $('#category_name_en').val('');
    parent = $('#category_name_en').parent();
    parent.removeClass('error');
    parent.find('.help-inline').hide();
    
    // Oculta el formulario
    $('#open_category').show();
    $('#category_box').slideUp();
  };
  
  /**
   * 
   * Inicializa las acciones de los botones de categorias
   * @author Joan Muñoz
   * 
   */
  this.initCategoryActions = function() {
    $('.edit_season').off('click').on('click', this.editCategory);
    $('.delete_season').off('click').on('click', this.deleteCategory);
    
    // Inicializa los tooltips
    $('a.edit').tooltip({ title : 'Editar.' });
    $('a.delete').tooltip({ title : 'Eliminar.' });
  };
  
  /**
   * 
   * Agrega una nueva categoría
   * @author Joan Muñoz
   * 
   */
  this.addCategory =  function() {
    var action = 'editcategory';
    
    if( $('#edit_category_id').val() == '' ) { action = 'savecategory'; }
    
    if ( $.trim( $('#category_name').val() ) == '' ) {
      var parent = $('#category_name').parent();
      parent.addClass('error');
      parent.find('.help-inline').show();
    } else if ( $.trim( $('#category_name_en').val() ) == '' ) {
      var parent = $('#category_name_en').parent();
      parent.addClass('error');
      parent.find('.help-inline').show();
    } else {
      
      $.ajax({
        type : 'POST',
        url : 'eventos/actions.php?action=' + action,
        data : {
          id : $('#edit_category_id').val(),
          nombre : $('#category_name').val(),
          nombre_en : $('#category_name_en').val(),
          tipo : $('#category_type').val()
        },
        dataType : 'json',
        success : function(Data) {
          if (Data.error == false) {
            if (action == 'savecategory') {
              Categorias.createNewCategory(Data.id);
            } else {
              Categorias.changeCategoryName(
                  $('#edit_category_id').val(),
                  $('#category_name').val(),
                  $('#category_name_en').val(),
                  $('#category_type').val()
              );
            }
            Categorias.hideCategoryForm();
          } else {
            alert('Ocurrio el siguiente error: ' + Data.message);
          }
        }
      });
    }
  };
  
  /**
   * 
   * Crea una nueva categoría en el html
   * @author Joan Muñoz
   * 
   */
  this.createNewCategory =  function(id) {
    var nombre = $('#category_name').val();
    var nombre_en = $('#category_name_en').val();
    var tipo = $('#category_type').val();
    
    var html = '<li>';
    html += '<input type="hidden" name="category_type" value="'+ tipo  +'" />';
    html += '<input type="hidden" name="category" value="'+ nombre +'" />';
    html += '<input type="hidden" name="category_en" value="'+ nombre_en +'" />';
    html += '<a href="eventos/?id=' + id + '" class="season_anchor">' + nombre + '</a>';
    html += '<a href="' + id + '" class="edit edit_season"></a>';
    html += '<a href="' + id + '" class="delete delete_season"></a>';
    html += '</li>';
    
    $('#category_list').prepend(html);
    this.initCategoryActions();
  };
  
  /**
   * 
   * Edita una categoría
   * @author Joan Muñoz
   * 
   */
  this.editCategory = function(e) {
    e.preventDefault();
    
    var parent = $(this).parent();
    
    // Llena los campos
    $('#edit_category_id').val( $(this).attr('href') );
    $('#category_name').val( parent.find('input[name="category"]').val() );
    $('#category_name_en').val( parent.find('input[name="category_en"]').val() );
    $('#category_type').val( parent.find('input[name="category_type"]').val() );
    
    // Abre el formulario
    Categorias.showCategoryForm();
  };
  
  
  /**
   * 
   * Cambia el nombre de la categoría después de editar
   * @author Joan Muñoz
   * 
   */
  this.changeCategoryName = function(id, name, name_en, tipo) {
    var edit_btn = $('.edit_season[href="'+ id +'"]');
    var parent = edit_btn.parent();
    
    parent.find('input[name="category"]').val( name );
    parent.find('input[name="category_en"]').val( name_en );
    parent.find('input[name="category_type"]').val( tipo );
    parent.find('.season_anchor').html( name );
    
  };

  /**
   * 
   * Elimina una categoría
   * @author Joan Muñoz
   * 
   */
  this.deleteCategory = function(e) {
    e.preventDefault();
    
    var parent = $(this).parent();
    var id = $(this).attr('href');
    var question = '¿Está seguro de eliminar esta categoría? '; 
    question += 'También se eliminarán sus eventos.'; 
    
    if ( confirm(question) ) {
      $.ajax({
        type : 'POST',
        url : 'eventos/actions.php?action=deletecategory',
        data : { id : id },
        dataType : 'json',
        success : function(Data) {
          if ( Data.error == false ) {
            parent.remove();    
          } else {
            alert('Ocurrio el siguiente error: ' + Data.message);
          }
        }
      });
    }
    
  };
    
})();